
package cn.com.pusai.core.util;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * url 参数操作类
 * */
public class ParameterUtil
{

	public ParameterUtil()
	{
	}
	
	
	/**
	 * 移除指定的参数 
	 * @param url 带参数的地址
	 * @param param 参数名称
	 * */
	public static String removeParam(String url, String param)
	{
		int index = url.indexOf("?");
		if (index >= 0)
		{
			String query = url.substring(index + 1);
			url = url.substring(0, index);
			String regexp = (new StringBuilder("(?:(^)|&)")).append(Matcher.quoteReplacement(param)).append("=[^&]*").toString();
			Pattern p = Pattern.compile(regexp);
			Matcher m = p.matcher(query);
			StringBuffer sb = new StringBuffer();
			for (; m.find(); m.appendReplacement(sb, ""));
			m.appendTail(sb);
			String str = sb.toString();
			if (str.startsWith("&"))
				str = str.substring(1);
			return (new StringBuilder(String.valueOf(url))).append(str.length() <= 0 ? "" : (new StringBuilder("?")).append(str).toString()).toString();
		} else
		{
			return url;
		}
	}
	
	/**
	 * 添加指定的参数  参数值默认编码方式为UTF-8
	 * @param url
	 * @param param 参数名
	 * @param values[] 参数值数组
	 * 
	 * */
	public static String addParam(String url, String param, String values[])
	{
		return addParam(url, param, values, "UTF-8");
	}
	
	
	/**
	 * 添加指定的参数
	 * @param url
	 * @param param 参数名
	 * @param values[] 参数值数组
	 * @param valueURLEncoderEncoding 值的编码方式
	 * 
	 * */
	public static String addParam(String url, String param, String values[], String valueURLEncoderEncoding)
	{
		if (values == null)
			return url;
		String as[];
		int j = (as = values).length;
		for (int i = 0; i < j; i++)
		{
			String value = as[i];
			url = addParam(url, param, value, valueURLEncoderEncoding);
		}

		return url;
	}
	
	
	/**
	 * 添加指定的参数 (值默认编码为utf-8)
	 * @param url
	 * @param param 参数名
	 * @param value 参数值数
	 * @param valueURLEncoderEncoding 值的编码方式
	 * 
	 * */
	public static String addParam(String url, String param, String value)
	{
		return addParam(url, param, value, "UTF-8");
	}

	
	/**
	 * 添加指定的参数
	 * @param url
	 * @param param 参数名
	 * @param value 参数值数组
	 * @param valueURLEncoderEncoding 值的编码方式
	 * 
	 * */
	public static String addParam(String url, String param, String value, String valueURLEncoderEncoding)
	{
		if (StringUtil.isBlank(value))
			return url;
		value = StringUtil.encodeURIComponent(value, valueURLEncoderEncoding);
		if (url.indexOf("?") == -1)
			url = (new StringBuilder(String.valueOf(url))).append("?").toString();
		else
			url = (new StringBuilder(String.valueOf(url))).append("&").toString();
		return (new StringBuilder(String.valueOf(url))).append(param).append("=").append(value).toString();
	}
	
	
	/**
	 * 替换指定的参数值(值默认编码为utf-8)
	 * @param url
	 * @param param 参数名
	 * @param value 新的参数值
	 * 
	 * */
	public static String replaceParam(String url, String param, String newValue)
	{
		return replaceParam(url, param, new String[] {
			newValue
		});
	}
	

	/**
	 * 替换指定的参数值
	 * @param url
	 * @param param 参数名
	 * @param value 新的参数值
	 * @param newValueURLEncoderEncoding 新值编码方式
	 * */
	public static String replaceParam(String url, String param, String newValue, String newValueURLEncoderEncoding)
	{
		return replaceParam(url, param, new String[] {
			newValue
		}, newValueURLEncoderEncoding);
	}
	
	
	/**
	 * 替换指定的参数值(值默认编码为utf-8)
	 * @param url
	 * @param param 参数名
	 * @param values 新的参数值数组
	 * */
	public static String replaceParam(String url, String param, String newValue[])
	{
		url = removeParam(url, param);
		return addParam(url, param, newValue);
	}
	
	/**
	 * 替换指定的参数值
	 * @param url
	 * @param param 参数名
	 * @param values 新的参数值数组
	 * @param newValueURLEncoderEncoding 新值编码方式
	 * */
	public static String replaceParam(String url, String param, String newValue[], String newValueURLEncoderEncoding)
	{
		url = removeParam(url, param);
		return addParam(url, param, newValue, newValueURLEncoderEncoding);
	}
}
